package com.ungs.form;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.SystemColor;
import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.swing.DefaultComboBoxModel;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.ListSelectionModel;
import javax.swing.border.EmptyBorder;
import javax.swing.border.LineBorder;
import javax.swing.border.TitledBorder;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.table.DefaultTableModel;

import com.toedter.calendar.JDateChooser;
import com.ungs.entities.CondicionEntrega;
import com.ungs.entities.DetalleCompra;
import com.ungs.entities.Direccion;
import com.ungs.entities.OrdenTrabajo;
import com.ungs.entities.Proveedor;
import com.ungs.entities.SolicitudCompra;
import com.ungs.form.impl.OrdenTrabajoFormImpl;
import com.ungs.form.impl.SolicitudCompraFormImpl;
import com.ungs.utils.Constantes;
import com.ungs.utils.Fechas;
import com.ungs.utils.ValidacionCampo;

public class SolicitudCompraForm extends JDialog {

	private static final long serialVersionUID = 1L;
	private final JPanel contentPanel = new JPanel();
	private JTextField txtFechaSolicitud;
	private JTextField txtCodOT;
	private JTextField txtNombreCortoOT;
	private JTextField txtRazonSocialOT;
	private JTextField txtRazonSocialProvBusqueda;
	private JTextField txtRazonSocialProv;
	private JTextField txtCuitProveedor;
	private JTextField txtNombreVendedor;
	private JTextField txtApellidoVendedor;
	private JTextField txtSubtotal;
	private JTextField txtIva;
	private JTextField txtMontoIva;
	private JTextField txtTotal;
	private JTextField txtDireccionEntrega;

	private JScrollPane scrollPaneDetalle;
	private JTable tbDetalle;
	private JRadioButton rbtnOrdenTrabajo;
	private JRadioButton rbtnStock;
	private JRadioButton rbtnRetiroProveedor;
	private JRadioButton rbtnEntregaDomicilio;
	private JDateChooser dateFechaEntrega;
	private JComboBox jcbHorarioEntrega;
	private JButton btnBuscarOT;
	private JButton btnBuscarProveedor;
	private JLabel lbDireccionEntrega;
	private JLabel lbHorarioEntrega;
	private JLabel lbTipoEntrega;
	private JLabel lbFechaEntrega;
	private Long idOrdenTrabajoSC;
	private Long idProveedorSC;
	private SolicitudCompraFormImpl solicitudCompraFormImpl;
	private List<DetalleCompra> detalleCompraList;
	private JTextField txtCodSolicitud;
	private JLabel label;
	private JLabel lbAsterisco1;
	private JLabel lbAsterisco2;
	private JLabel lbAsterisco3;
	private float subTotal;
	private float montoIva;
	private float total;
	private float iva;

	public SolicitudCompraForm(JFrame parent) {
		super(parent, true);
		setTitle("Solicitud de Compra");
		setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
		setResizable(false);
		initForm();
		iniciarSolicitudCompra();
	}

	@SuppressWarnings("serial")
	private void initForm() {
		setBounds(100, 100, 958, 733);
		getContentPane().setLayout(new BorderLayout());
		contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
		getContentPane().add(contentPanel, BorderLayout.CENTER);
		contentPanel.setLayout(null);

		JLabel lbCodSolicitud = new JLabel("N\u00FAmero Solicitud:");
		lbCodSolicitud.setBounds(10, 23, 90, 14);
		contentPanel.add(lbCodSolicitud);

		JLabel lbFechaSolicitud = new JLabel("Fecha Solicitud:");
		lbFechaSolicitud.setBounds(271, 23, 99, 14);
		contentPanel.add(lbFechaSolicitud);

		txtFechaSolicitud = new JTextField();
		txtFechaSolicitud.setEditable(false);
		txtFechaSolicitud.setColumns(10);
		txtFechaSolicitud.setBackground(Color.LIGHT_GRAY);
		txtFechaSolicitud.setBounds(356, 20, 127, 20);
		contentPanel.add(txtFechaSolicitud);

		JPanel panelTipoPedido = new JPanel();
		panelTipoPedido.setLayout(null);
		panelTipoPedido.setBorder(new TitledBorder(new LineBorder(new Color(0,
				0, 0)), "Tipo Pedido", TitledBorder.LEADING, TitledBorder.TOP,
				null, null));
		panelTipoPedido.setBounds(10, 48, 166, 93);
		contentPanel.add(panelTipoPedido);

		rbtnOrdenTrabajo = new JRadioButton("Orden de Trabajo");
		rbtnOrdenTrabajo.addChangeListener(new ChangeListener() {
			public void stateChanged(ChangeEvent e) {
				eventoRadioButtonOT();
			}
		});
		rbtnOrdenTrabajo.setBounds(6, 19, 123, 23);
		panelTipoPedido.add(rbtnOrdenTrabajo);

		rbtnStock = new JRadioButton("Stock");
		rbtnStock.addChangeListener(new ChangeListener() {
			public void stateChanged(ChangeEvent e) {
				eventoRadioButtonStock();
			}
		});
		rbtnStock.setBounds(6, 47, 70, 23);
		panelTipoPedido.add(rbtnStock);

		JPanel panelOrdenTrabajo = new JPanel();
		panelOrdenTrabajo.setLayout(null);
		panelOrdenTrabajo.setBorder(new TitledBorder(new LineBorder(new Color(
				0, 0, 0)), "Orden de Trabajo", TitledBorder.LEADING,
				TitledBorder.TOP, null, null));
		panelOrdenTrabajo.setBounds(196, 48, 746, 93);
		contentPanel.add(panelOrdenTrabajo);

		JLabel lbCodOT = new JLabel("N\u00FAmero OT:");
		lbCodOT.setBounds(10, 27, 78, 14);
		panelOrdenTrabajo.add(lbCodOT);

		txtCodOT = new JTextField();
		txtCodOT.setEditable(false);
		txtCodOT.addKeyListener(new KeyAdapter() {
			@Override
			public void keyTyped(KeyEvent e) {
				ValidacionCampo.verificarLargoCamposJTextField(e, txtCodOT, 10);
			}
		});
		txtCodOT.setBackground(Color.LIGHT_GRAY);
		txtCodOT.setBounds(104, 24, 165, 20);
		panelOrdenTrabajo.add(txtCodOT);

		btnBuscarOT = new JButton("Buscar");
		btnBuscarOT.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				eventoBotonBuscarOT();
			}
		});
		btnBuscarOT.setBounds(289, 23, 89, 23);
		panelOrdenTrabajo.add(btnBuscarOT);

		JLabel lbNombreCortoOT = new JLabel("Nombre Corto:");
		lbNombreCortoOT.setBounds(299, 55, 78, 14);
		panelOrdenTrabajo.add(lbNombreCortoOT);

		txtNombreCortoOT = new JTextField();
		txtNombreCortoOT.setForeground(Color.BLACK);
		txtNombreCortoOT.setEditable(false);
		txtNombreCortoOT.addKeyListener(new KeyAdapter() {
			@Override
			public void keyTyped(KeyEvent e) {
				ValidacionCampo.verificarLargoCamposJTextField(e,
						txtNombreCortoOT, 10);
			}
		});
		txtNombreCortoOT.setBackground(Color.LIGHT_GRAY);
		txtNombreCortoOT.setBounds(387, 52, 142, 20);
		panelOrdenTrabajo.add(txtNombreCortoOT);

		JLabel lbRazonSocialOT = new JLabel("Raz\u00F3n Social:");
		lbRazonSocialOT.setBounds(20, 58, 78, 14);
		panelOrdenTrabajo.add(lbRazonSocialOT);

		txtRazonSocialOT = new JTextField();
		txtRazonSocialOT.setEditable(false);
		txtRazonSocialOT.setColumns(10);
		txtRazonSocialOT.setBackground(Color.LIGHT_GRAY);
		txtRazonSocialOT.setBounds(108, 55, 165, 20);
		panelOrdenTrabajo.add(txtRazonSocialOT);

		JPanel panelProveedor = new JPanel();
		panelProveedor.setLayout(null);
		panelProveedor.setBorder(new TitledBorder(new LineBorder(new Color(0,
				0, 0)), " Proveedor ", TitledBorder.LEADING, TitledBorder.TOP,
				null, new Color(0, 0, 0)));
		panelProveedor.setBounds(10, 152, 353, 158);
		contentPanel.add(panelProveedor);

		JLabel lbBusquedaRazonSocialProveedor = new JLabel("Raz\u00F3n Social:");
		lbBusquedaRazonSocialProveedor.setBounds(10, 28, 73, 14);
		panelProveedor.add(lbBusquedaRazonSocialProveedor);

		txtRazonSocialProvBusqueda = new JTextField();
		txtRazonSocialProvBusqueda.addKeyListener(new KeyAdapter() {
			@Override
			public void keyTyped(KeyEvent e) {
				ValidacionCampo.verificarLargoCamposJTextField(e,
						txtRazonSocialProvBusqueda, 30);
			}
		});
		txtRazonSocialProvBusqueda.setBounds(85, 25, 132, 20);
		panelProveedor.add(txtRazonSocialProvBusqueda);

		btnBuscarProveedor = new JButton("Buscar");
		btnBuscarProveedor.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				eventoBotonBuscarProveedor();
			}
		});
		btnBuscarProveedor.setBounds(240, 24, 89, 23);
		panelProveedor.add(btnBuscarProveedor);

		JLabel lbRazonSocialProveedor = new JLabel("Raz\u00F3n Social:");
		lbRazonSocialProveedor.setBounds(10, 72, 73, 14);
		panelProveedor.add(lbRazonSocialProveedor);

		txtRazonSocialProv = new JTextField();
		txtRazonSocialProv.setEditable(false);
		txtRazonSocialProv.setColumns(10);
		txtRazonSocialProv.setBackground(Color.LIGHT_GRAY);
		txtRazonSocialProv.setBounds(85, 69, 147, 20);
		panelProveedor.add(txtRazonSocialProv);

		JLabel lbCuitProveedor = new JLabel("CUIT:");
		lbCuitProveedor.setBounds(10, 115, 61, 14);
		panelProveedor.add(lbCuitProveedor);

		txtCuitProveedor = new JTextField();
		txtCuitProveedor.setEditable(false);
		txtCuitProveedor.setColumns(10);
		txtCuitProveedor.setBackground(Color.LIGHT_GRAY);
		txtCuitProveedor.setBounds(85, 112, 147, 20);
		panelProveedor.add(txtCuitProveedor);

		lbAsterisco1 = new JLabel("*");
		lbAsterisco1.setFont(new Font("Tahoma", Font.BOLD, 11));
		lbAsterisco1.setBounds(240, 72, 26, 14);
		panelProveedor.add(lbAsterisco1);

		lbAsterisco2 = new JLabel("*");
		lbAsterisco2.setFont(new Font("Tahoma", Font.BOLD, 11));
		lbAsterisco2.setBounds(240, 115, 26, 14);
		panelProveedor.add(lbAsterisco2);

		JPanel panelVendedor = new JPanel();
		panelVendedor.setLayout(null);
		panelVendedor.setBorder(new TitledBorder(new LineBorder(new Color(0, 0,
				0)), " Vendedor ", TitledBorder.LEADING, TitledBorder.TOP,
				null, new Color(0, 0, 0)));
		panelVendedor.setBounds(10, 321, 932, 65);
		contentPanel.add(panelVendedor);

		JLabel lbNombreVendedor = new JLabel("Nombre:");
		lbNombreVendedor.setBounds(20, 26, 61, 14);
		panelVendedor.add(lbNombreVendedor);

		txtNombreVendedor = new JTextField();
		txtNombreVendedor.setColumns(10);
		txtNombreVendedor.setBackground(Color.WHITE);
		txtNombreVendedor.setBounds(76, 23, 141, 20);
		panelVendedor.add(txtNombreVendedor);

		JLabel lbApellidoVendedor = new JLabel("Apellido:");
		lbApellidoVendedor.setBounds(256, 26, 61, 14);
		panelVendedor.add(lbApellidoVendedor);

		txtApellidoVendedor = new JTextField();
		txtApellidoVendedor.setColumns(10);
		txtApellidoVendedor.setBackground(Color.WHITE);
		txtApellidoVendedor.setBounds(314, 23, 147, 20);
		panelVendedor.add(txtApellidoVendedor);

		JPanel panelCondicionEntrega = new JPanel();
		panelCondicionEntrega.setLayout(null);
		panelCondicionEntrega.setBorder(new TitledBorder(new LineBorder(
				new Color(0, 0, 0)), " Condici\u00F3n de Entrega ",
				TitledBorder.LEADING, TitledBorder.TOP, null,
				new Color(0, 0, 0)));
		panelCondicionEntrega.setBounds(385, 152, 557, 158);
		contentPanel.add(panelCondicionEntrega);

		dateFechaEntrega = new JDateChooser();
		dateFechaEntrega
				.addPropertyChangeListener(new PropertyChangeListener() {
					public void propertyChange(PropertyChangeEvent evt) {
						eventoCambioFecha();
					}
				});
		dateFechaEntrega.getCalendarButton().setToolTipText("Ver calendario");
		dateFechaEntrega
				.setToolTipText("Click en boton para expandir calendario");
		dateFechaEntrega.setForeground(Color.BLACK);
		dateFechaEntrega.setDateFormatString("dd/MM/yyyy");
		dateFechaEntrega.setBackground(Color.WHITE);
		dateFechaEntrega.setBounds(97, 31, 145, 20);
		panelCondicionEntrega.add(dateFechaEntrega);

		lbFechaEntrega = new JLabel("Fecha Entrega:");
		lbFechaEntrega.setBounds(10, 31, 87, 14);
		panelCondicionEntrega.add(lbFechaEntrega);

		jcbHorarioEntrega = new JComboBox();
		jcbHorarioEntrega.setModel(new DefaultComboBoxModel(new String[] {
				"MA\u00D1ANA", "TARDE" }));
		jcbHorarioEntrega.setBounds(338, 27, 131, 22);
		panelCondicionEntrega.add(jcbHorarioEntrega);

		lbHorarioEntrega = new JLabel("Horario:");
		lbHorarioEntrega.setBounds(280, 31, 51, 14);
		panelCondicionEntrega.add(lbHorarioEntrega);

		lbTipoEntrega = new JLabel("Tipo de Entrega");
		lbTipoEntrega.setBounds(10, 73, 116, 14);
		panelCondicionEntrega.add(lbTipoEntrega);

		lbDireccionEntrega = new JLabel("Direcci\u00F3n Entrega");
		lbDireccionEntrega.setEnabled(false);
		lbDireccionEntrega.setBounds(208, 101, 103, 14);
		panelCondicionEntrega.add(lbDireccionEntrega);

		txtDireccionEntrega = new JTextField();
		txtDireccionEntrega.setBackground(Color.LIGHT_GRAY);
		txtDireccionEntrega.setEnabled(false);
		txtDireccionEntrega.setEditable(false);
		txtDireccionEntrega.setBounds(208, 123, 237, 20);
		panelCondicionEntrega.add(txtDireccionEntrega);

		rbtnEntregaDomicilio = new JRadioButton("Entrega en Domicilio");
		rbtnEntregaDomicilio.addChangeListener(new ChangeListener() {
			public void stateChanged(ChangeEvent e) {
				eventoRadioButtonEntregaDomicilio();
			}
		});
		rbtnEntregaDomicilio.setBounds(6, 94, 147, 23);
		panelCondicionEntrega.add(rbtnEntregaDomicilio);

		rbtnRetiroProveedor = new JRadioButton("Retiro en Proveedor");
		rbtnRetiroProveedor.addChangeListener(new ChangeListener() {
			public void stateChanged(ChangeEvent e) {
				eventoRadioButtonRetiroProveedor();
			}
		});
		rbtnRetiroProveedor.setBounds(6, 120, 147, 23);
		panelCondicionEntrega.add(rbtnRetiroProveedor);

		lbAsterisco3 = new JLabel("*");
		lbAsterisco3.setFont(new Font("Tahoma", Font.BOLD, 11));
		lbAsterisco3.setBounds(252, 31, 26, 14);
		panelCondicionEntrega.add(lbAsterisco3);

		JPanel panelDetalle = new JPanel();
		panelDetalle.setLayout(null);
		panelDetalle.setBorder(new TitledBorder(new LineBorder(new Color(0, 0,
				0)), "Detalle", TitledBorder.LEADING, TitledBorder.TOP, null,
				null));
		panelDetalle.setBounds(10, 397, 932, 242);
		contentPanel.add(panelDetalle);

		scrollPaneDetalle = new JScrollPane();
		scrollPaneDetalle.setBounds(10, 30, 912, 135);
		panelDetalle.add(scrollPaneDetalle);

		tbDetalle = new JTable();
		tbDetalle.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				eventoMouseTabla(e);
			}
		});
		tbDetalle.setModel(new DefaultTableModel(new Object[][] {},
				new String[] { "Cant. Hojas", "Elemento", "Marca", "Calidad",
						"Variante", "Gramaje", "Formato", "Pc. Unit",
						"Un. Medida", "Importe" }) {
			@SuppressWarnings("rawtypes")
			Class[] columnTypes = new Class[] { Integer.class, String.class,
					String.class, String.class, String.class, String.class,
					String.class, String.class, String.class, String.class };

			@SuppressWarnings({ "unchecked", "rawtypes" })
			public Class getColumnClass(int columnIndex) {
				return columnTypes[columnIndex];
			}

			boolean[] columnEditables = new boolean[] { false, false, false,
					false, false, false, false, false, false, false };

			public boolean isCellEditable(int row, int column) {
				return columnEditables[column];
			}
		});
		tbDetalle.getColumnModel().getColumn(0).setResizable(false);
		tbDetalle.getColumnModel().getColumn(1).setResizable(false);
		tbDetalle.getColumnModel().getColumn(2).setResizable(false);
		tbDetalle.getColumnModel().getColumn(3).setResizable(false);
		tbDetalle.getColumnModel().getColumn(4).setResizable(false);
		tbDetalle.getColumnModel().getColumn(5).setResizable(false);
		tbDetalle.getColumnModel().getColumn(6).setResizable(false);
		tbDetalle.getColumnModel().getColumn(7).setResizable(false);
		tbDetalle.getColumnModel().getColumn(8).setResizable(false);
		tbDetalle.getColumnModel().getColumn(9).setResizable(false);
		scrollPaneDetalle.setViewportView(tbDetalle);

		JLabel lbSubtotal = new JLabel("SubTotal:");
		lbSubtotal.setBounds(229, 213, 57, 14);
		panelDetalle.add(lbSubtotal);

		txtSubtotal = new JTextField();
		txtSubtotal.setEditable(false);
		txtSubtotal.setColumns(10);
		txtSubtotal.setBackground(Color.LIGHT_GRAY);
		txtSubtotal.setBounds(285, 210, 86, 20);
		panelDetalle.add(txtSubtotal);

		JLabel lbIva = new JLabel("% IVA:");
		lbIva.setBounds(395, 213, 46, 14);
		panelDetalle.add(lbIva);

		txtIva = new JTextField();
		txtIva.addFocusListener(new FocusAdapter() {
			@Override
			public void focusGained(FocusEvent e) {
				txtIva.selectAll();
			}

			@Override
			public void focusLost(FocusEvent arg0) {
				calcularTotalImporte();
			}
		});
		txtIva.addKeyListener(new KeyAdapter() {
			@Override
			public void keyTyped(KeyEvent e) {
				ValidacionCampo.verificarSoloNumerosFloat(e);
				ValidacionCampo.verificarLargoCamposJTextField(e, txtIva, 5);
			}
		});
		txtIva.setColumns(10);
		txtIva.setBackground(Color.WHITE);
		txtIva.setBounds(440, 210, 86, 20);
		panelDetalle.add(txtIva);

		JLabel lbMontoIva = new JLabel("Monto IVA:");
		lbMontoIva.setBounds(536, 213, 66, 14);
		panelDetalle.add(lbMontoIva);

		txtMontoIva = new JTextField();
		txtMontoIva.setColumns(10);
		txtMontoIva.setBackground(Color.LIGHT_GRAY);
		txtMontoIva.setBounds(597, 210, 86, 20);
		panelDetalle.add(txtMontoIva);

		JLabel lbTotal = new JLabel("Total:");
		lbTotal.setBounds(693, 213, 46, 14);
		panelDetalle.add(lbTotal);

		txtTotal = new JTextField();
		txtTotal.setEditable(false);
		txtTotal.setColumns(10);
		txtTotal.setBackground(Color.LIGHT_GRAY);
		txtTotal.setBounds(739, 210, 86, 20);
		panelDetalle.add(txtTotal);

		JButton btnAgregarDetalle = new JButton("Agregar Detalle");
		btnAgregarDetalle.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				eventoAgregarDetalleCompra();
			}
		});
		btnAgregarDetalle.setBounds(10, 176, 131, 23);
		panelDetalle.add(btnAgregarDetalle);

		JButton btnModificarDetalle = new JButton("Modificar Detalle");
		btnModificarDetalle.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				eventoModificarDetalleCompra();
			}
		});
		btnModificarDetalle.setBounds(164, 176, 137, 23);
		panelDetalle.add(btnModificarDetalle);

		JButton btnEliminarDetalle = new JButton("Eliminar Detalle");
		btnEliminarDetalle.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				eventoEliminarDetalleCompra();
			}
		});
		btnEliminarDetalle.setBounds(416, 176, 137, 23);
		panelDetalle.add(btnEliminarDetalle);

		txtCodSolicitud = new JTextField();
		txtCodSolicitud.setBackground(Color.LIGHT_GRAY);
		txtCodSolicitud.setEditable(false);
		txtCodSolicitud.setBounds(94, 20, 149, 20);
		contentPanel.add(txtCodSolicitud);
		txtCodSolicitud.setColumns(10);

		label = new JLabel("Los campos con * son obligatorios");
		label.setFont(new Font("Tahoma", Font.BOLD, 11));
		label.setBounds(10, 650, 401, 14);
		contentPanel.add(label);
		{
			JPanel buttonPane = new JPanel();
			buttonPane.setLayout(new FlowLayout(FlowLayout.RIGHT));
			getContentPane().add(buttonPane, BorderLayout.SOUTH);
			{
				JButton okButton = new JButton("Guardar");
				okButton.addMouseListener(new MouseAdapter() {
					@Override
					public void mouseClicked(MouseEvent e) {
						eventoBotonGuardar();
					}
				});
				buttonPane.add(okButton);
				getRootPane().setDefaultButton(okButton);
			}
			{
				JButton cancelButton = new JButton("Cancelar");
				cancelButton.addMouseListener(new MouseAdapter() {
					@Override
					public void mouseClicked(MouseEvent e) {
						eventoBotonCancelar();
					}
				});
				buttonPane.add(cancelButton);
			}
		}
	}

	private void iniciarSolicitudCompra() {
		tbDetalle.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		solicitudCompraFormImpl = new SolicitudCompraFormImpl();
		rbtnOrdenTrabajo.setSelected(true);
		rbtnEntregaDomicilio.setSelected(true);
		txtFechaSolicitud.setText(Fechas.getFechaActualString());
		detalleCompraList = new ArrayList<DetalleCompra>();
		formatoTablaDetalleCompra();
		txtCodSolicitud.setText(solicitudCompraFormImpl
				.obtenerNumIdentificatorio());
		txtIva.setText("21");
	}

	private void eventoRadioButtonStock() {
		if (rbtnStock.isSelected()) {
			rbtnOrdenTrabajo.setSelected(false);
			txtCodOT.setEnabled(false);
			txtCodOT.setBackground(SystemColor.activeCaptionBorder);
			btnBuscarOT.setEnabled(false);
			txtNombreCortoOT.setEnabled(false);
			txtNombreCortoOT.setBackground(SystemColor.activeCaptionBorder);
			txtRazonSocialOT.setEnabled(false);
			txtRazonSocialOT.setBackground(SystemColor.activeCaptionBorder);

			txtCodOT.setText("");
			txtNombreCortoOT.setText("");
			txtRazonSocialOT.setText("");
		} else if (!rbtnOrdenTrabajo.isSelected()) {
			rbtnStock.setSelected(true);
		}
	}

	private void eventoRadioButtonOT() {
		if (rbtnOrdenTrabajo.isSelected()) {
			rbtnStock.setSelected(false);
			txtCodOT.setEnabled(true);
			txtCodOT.setBackground(Color.LIGHT_GRAY);
			btnBuscarOT.setEnabled(true);
			txtNombreCortoOT.setEnabled(true);
			txtNombreCortoOT.setBackground(Color.LIGHT_GRAY);
			txtRazonSocialOT.setEnabled(true);
			txtRazonSocialOT.setBackground(Color.LIGHT_GRAY);
		} else if (!rbtnStock.isSelected()) {
			rbtnOrdenTrabajo.setSelected(true);
		}
	}

	private void eventoRadioButtonEntregaDomicilio() {
		if (rbtnEntregaDomicilio != null && rbtnRetiroProveedor != null) {
			if (rbtnEntregaDomicilio.isSelected()) {
				rbtnRetiroProveedor.setSelected(false);
				txtDireccionEntrega.setVisible(false);
				lbDireccionEntrega.setVisible(false);
			} else if (!rbtnRetiroProveedor.isSelected()) {
				rbtnEntregaDomicilio.setSelected(true);
			}
		}
	}

	private void eventoRadioButtonRetiroProveedor() {
		if (rbtnEntregaDomicilio != null && rbtnRetiroProveedor != null) {
			if (rbtnRetiroProveedor.isSelected()) {
				rbtnEntregaDomicilio.setSelected(false);
				txtDireccionEntrega.setVisible(true);
				lbDireccionEntrega.setVisible(true);
			} else if (!rbtnEntregaDomicilio.isSelected()) {
				rbtnRetiroProveedor.setSelected(true);
			}
		}
	}

	private void eventoBotonBuscarOT() {
		OrdenTrabajoFormImpl ordenTrabajoFormImpl = new OrdenTrabajoFormImpl();
		List<OrdenTrabajo> ordenTrabajoList = ordenTrabajoFormImpl
				.getOrdenTrabajoSinFinalizar();
		ConsultaOrdenTrabajoForm consultaOrdenTrabajoForm = new ConsultaOrdenTrabajoForm(
				this, ordenTrabajoList, true);
		consultaOrdenTrabajoForm.setVisible(true);
		OrdenTrabajo ordenTrabajo = consultaOrdenTrabajoForm.getOrdenTrabajo();
		consultaOrdenTrabajoForm.dispose();
		if (ordenTrabajo != null) {
			txtCodOT.setText(ordenTrabajo.getNumIdentificatorio());
			txtNombreCortoOT.setText(ordenTrabajo.getNombreCorto());
			if (ordenTrabajo.getCliente() != null)
				txtRazonSocialOT.setText(ordenTrabajo.getCliente()
						.getRazonSocial());

			idOrdenTrabajoSC = ordenTrabajo.getId();

			detalleCompraList = solicitudCompraFormImpl
					.detalleCompraPorOrdenTrabajo(ordenTrabajo);
			cargarTablaDetalleCompra();
		}

	}

	private void eventoBotonBuscarProveedor() {
		String razonSocial = txtRazonSocialProvBusqueda.getText().trim();
		ConsultaProveedorForm consultaProveedorForm = new ConsultaProveedorForm(
				this, razonSocial);
		consultaProveedorForm.setVisible(true);
		Proveedor proveedor = consultaProveedorForm.getProveedor();

		if (proveedor != null) {
			txtRazonSocialProv.setText(proveedor.getRazonSocial());
			txtCuitProveedor.setText(proveedor.getCuit());

			String direccion = proveedor.getDireccion().getCalle() + " "
					+ proveedor.getDireccion().getNumero() + ", "
					+ proveedor.getDireccion().getLocalidad();

			txtDireccionEntrega.setText(direccion);

			idProveedorSC = proveedor.getId();

			// habilitar
			condicionEntregaComponentes(true);
		}
	}

	private void condicionEntregaComponentes(boolean habilitado) {
		lbFechaEntrega.setEnabled(habilitado);
		dateFechaEntrega.setEnabled(habilitado);
		lbHorarioEntrega.setEnabled(habilitado);
		jcbHorarioEntrega.setEnabled(habilitado);
		lbTipoEntrega.setEnabled(habilitado);
		rbtnEntregaDomicilio.setEnabled(habilitado);
		rbtnRetiroProveedor.setEnabled(habilitado);
		lbDireccionEntrega.setEnabled(habilitado);
		txtDireccionEntrega.setEnabled(habilitado);
	}

	private void eventoAgregarDetalleCompra() {
		AddDetalleCompraForm addDetalleCompraForm = new AddDetalleCompraForm(
				this, true, null);
		addDetalleCompraForm.setVisible(true);

		if (addDetalleCompraForm.getDetalleCompra() != null) {
			if (addDetalleCompraForm.getDetalleCompra() != null) {
				detalleCompraList.add(addDetalleCompraForm.getDetalleCompra());
				cargarTablaDetalleCompra();
				addDetalleCompraForm.dispose();
				calcularTotalImporte();
			}
		}
	}

	private void eventoModificarDetalleCompra() {
		int filaSeleccionada = tbDetalle.getSelectedRow();
		if (filaSeleccionada >= 0) {
			DetalleCompra detalleCompra = detalleCompraList
					.get(filaSeleccionada);
			AddDetalleCompraForm addDetalleCompraForm = new AddDetalleCompraForm(
					this, false, detalleCompra);
			addDetalleCompraForm.setVisible(true);
			detalleCompraList.set(filaSeleccionada,
					addDetalleCompraForm.getDetalleCompra());
			addDetalleCompraForm.dispose();
			cargarTablaDetalleCompra();
			calcularTotalImporte();
		}
	}

	private void eventoEliminarDetalleCompra() {
		int filaSeleccionada = tbDetalle.getSelectedRow();
		if (filaSeleccionada >= 0) {
			detalleCompraList.remove(filaSeleccionada);
			cargarTablaDetalleCompra();
			calcularTotalImporte();
		}
	}

	private void formatoTablaDetalleCompra() {
		int ancho = scrollPaneDetalle.getWidth();
		solicitudCompraFormImpl.formatoTablaDetalleCompra(tbDetalle, ancho);
	}

	private void cargarTablaDetalleCompra() {
		solicitudCompraFormImpl.cargarTablaDetalleCompra(tbDetalle,
				detalleCompraList);
	}

	private void eventoBotonGuardar() {
		calcularTotalImporte();
		boolean okDetalle = true;
		for (DetalleCompra detalleCompra : detalleCompraList) {
			if (detalleCompra.getMarca() == null
					|| detalleCompra.getImporte() == 0
					|| detalleCompra.getUnidadMedidaPrecio() == null) {
				okDetalle = false;
			}
		}

		if (idProveedorSC != null && dateFechaEntrega.getDate() != null
				&& okDetalle) {
			SolicitudCompra solicitudCompra = new SolicitudCompra();
			solicitudCompra.setCodigo(txtCodSolicitud.getText());

			// Orden de Trabajo
			OrdenTrabajo ordenTrabajo = null;
			if (idOrdenTrabajoSC != null) {
				ordenTrabajo = new OrdenTrabajo();
				ordenTrabajo.setId(idOrdenTrabajoSC);
			}
			solicitudCompra.setOrdenTrabajo(ordenTrabajo);

			// Proveedor
			Proveedor proveedor = solicitudCompraFormImpl
					.getProveedorPorId(idProveedorSC);
			solicitudCompra.setProveedor(proveedor);

			// Vendedor
			String nombreVendedor = txtNombreVendedor.getText().toUpperCase();
			String apellidoVendedor = txtApellidoVendedor.getText()
					.toUpperCase();
			solicitudCompra.setNombreVendedor(nombreVendedor);
			solicitudCompra.setApellidoVendedor(apellidoVendedor);

			// Condicion de Entrega
			CondicionEntrega condicionEntrega = new CondicionEntrega();
			String turnoEntrega = (String) jcbHorarioEntrega.getSelectedItem();
			String condicionRetiro = Constantes.TIPO_RETIRO_DOMICILIO;
			if (rbtnRetiroProveedor.isSelected()) {
				condicionRetiro = Constantes.TIPO_RETIRO_PROVEEDOR;
			}

			Date fechaEntrega = dateFechaEntrega.getDate();

			// Direccion Retiro
			Direccion direccionRetiro = proveedor.getDireccion();

			condicionEntrega.setCondicionRetiro(condicionRetiro);
			condicionEntrega.setTurnoEntrega(turnoEntrega);
			condicionEntrega.setDireccionRetiro(direccionRetiro);
			if (fechaEntrega != null) {
				condicionEntrega.setFechaEntrega(fechaEntrega);
			}

			// Importes
			solicitudCompra.setIva(iva);

			solicitudCompra.setCondicionEntrega(condicionEntrega);
			solicitudCompra.setFechaConfeccion(Fechas
					.getFechaActualConHoraDate());

			solicitudCompra.setEstado(Constantes.ESTADO_SC_PENDIENTE);

			solicitudCompraFormImpl.generarSolicitudCompra(solicitudCompra,
					detalleCompraList);
			JOptionPane.showMessageDialog(this,
					"Se guardo la Solicitud de Compra", "Guardada",
					JOptionPane.INFORMATION_MESSAGE);
			this.setVisible(false);
			this.dispose();
		} else {
			JOptionPane.showMessageDialog(this, "Campos obligatorios:\n"
					+ "Proveedor\nFecha Entrega\n"
					+ "Completar todas los datos en detalle.\n"
					+ "Verificar que los importes no sean 0", "Advertencia",
					JOptionPane.WARNING_MESSAGE);
		}
	}

	private void calcularTotalImporte() {
		subTotal = 0;
		montoIva = 0;
		total = 0;
		iva = 21;
		try {
			iva = Float.parseFloat(txtIva.getText());
		} catch (Exception e) {
			iva = 21;
		}

		for (int i = 0; i < tbDetalle.getRowCount(); i++) {
			float importeFila = Float.parseFloat(String.valueOf(tbDetalle
					.getValueAt(i, 9)));
			subTotal = subTotal + importeFila;
		}

		montoIva = subTotal * iva / 100;
		total = montoIva + subTotal;

		// COMPLETAMOS LOS CAMPOS
		txtSubtotal.setText(String.valueOf(subTotal));
		txtMontoIva.setText(String.valueOf(montoIva));
		txtTotal.setText(String.valueOf(total));
		txtIva.setText(String.valueOf(iva));

	}

	private void eventoMouseTabla(MouseEvent e) {
		if (e.getClickCount() == 2) {
			eventoModificarDetalleCompra();
		}
	}

	private void eventoBotonCancelar() {
		this.setVisible(false);
		this.dispose();
	}

	private void eventoCambioFecha() {
		if (dateFechaEntrega.getDate() != null) {
			Date fechaPrometida = dateFechaEntrega.getDate();
			if (!Fechas.validarFecha(fechaPrometida)) {
				dateFechaEntrega.setDate(null);
				JOptionPane
						.showMessageDialog(
								this,
								"La fecha de entrega no puede ser menor\na la fecha actual.",
								"Advertencia", JOptionPane.WARNING_MESSAGE);
			}
		}
	}
}
